import com.sun.media.sound.RIFFInvalidDataException;
import sun.plugin2.message.GetAppletMessage;

public class G如何按要求比较两个数的大小 {
    /**
     * 如何比较a、b两个数的大小，不能使用大于、小于以及if语句。
     */
    private static class A绝对值法{
        /**
         * 根据绝对值的性质可知，
         * 如果|a-b|==a-b，那么max（a,b）=a；否则max（a,b）=b，
         * 根据这个思路实现代码如下
         */
        public static int max(int a,int b){
            return Math.abs(a-b)==(a-b)?a:b;
        }
        public static void main(String[] args) {
            System.out.println(max(5,6));
        }
    }

    /**
     * 如果a＞b，那么a-b的二进制最高位为0，(int的最大值是2147483647=0111 1111 1111 1111 1111 1111 1111 1111)
     * 与任何数的与操作的结果还是0；如果a-b为负数，
     * 那么a-b的二进制最高位为1，
     * 与0x80000000（最高位为1，其他位为0，假设a与b都占4个字节）执行“与”操作之后为结果为1。
     * 由此根据两个数的差的二进制最高位的值就可以比较两个数的大小，实现方法如下
     */
    private static class B二进制法{
        public static void getMax(int a,int b){
            System.out.println(((a-b)&(1<<31))!=0?b:a);
            System.out.println(((a-b)&(0x80000000))!=0?b:a);
        }
        public static void main(String[] args) {
            getMax(1,3);
        }
    }
}
